<HTML><HEAD><TITLE>disjunctive_bools(+StartTimes, +Durations, ?OrderingBools)</TITLE>
</HEAD><BODY>[ <A HREF="index.html">library(ic_edge_finder3)</A> | <A HREF="../../index.html">Reference Manual</A> | <A HREF="../../fullindex.html">Alphabetic Index</A> ]
<H1>disjunctive_bools(+StartTimes, +Durations, ?OrderingBools)</H1>
Constrain the tasks with specified start times and durations to not overlap in time.
<DL>
<DT><EM>StartTimes</EM></DT>
<DD>Collection of start times for tasks (integer variables or integers)
</DD>
<DT><EM>Durations</EM></DT>
<DD>Collection of duration for tasks (integer variables or integers)
</DD>
<DT><EM>OrderingBools</EM></DT>
<DD>Variable, or list of ordering Booleans (variable or 0 or 1)
</DD>
</DL>
<H2>Description</H2>
<P>
    A disjunctive scheduling constraint. StartTimes and Durations are
    collections (a la collection_to_list/2) of equal size N of integer
    variables or integers.  The declarative meaning is that the N tasks with
    the given start times and durations do not overlap at any point in time.
</P><P>
    OrderingBools is a list of ordering Booleans. For each possible pair of
    tasks, there is one Boolean which describes the order of these two tasks.
    If the Tasks are numbered 1..N, and the Booleans are numbered
    1..N*(N-1)//2, then the Boolean corresponding to the task pair I,J
    (with I&gt;J) has the index (I-1)(I-2)//2 + J.  In other words, the
    OrderingBools list is a flattened version of a strictly lower
    triangular matrix of ordering Booleans, i.e.
    <PRE>
        I\J|  1    2    3    4    5
        ---+--------------------------
        1  |  .    .    .    .    .
        2  | B[1]  .    .    .    .
        3  | B[2] B[3]  .    .    .
        4  | B[4] B[5] B[6]  .    .
        5  | B[7] B[8] B[9] B[10] .
    </PRE>
    The Boolean being set to 1 indicates that task I is before task J,
    a value of 0 indicates that task J is before task I. If uninstantiated,
    the order is not (yet) determined. Operationally, the constraint will
    both infer start time bounds from the setting of the Booleans, and
    infer Boolean settings from the start times and durations.
</P><P>
    The Booleans should be used for making search choices, typically by
    setting them such that a task is chosen to be first (or last) among
    a group of tasks.
</P><P>
    Any Start and Duration variables which do not already have finite bounds
    will be given default bounds of -10000000 to 10000000. The Booleans on
    the other hand can be domainless variables, and the only way in which
    the constraint will affect them is by instantiation to 0 or 1.
</P>
<H3>Modes and Determinism</H3><UL>
<LI>disjunctive_bools(+, +, +)
<LI>disjunctive_bools(+, +, -)
</UL>
<H2>See Also</H2>
<A HREF="../../lib/ic_edge_finder3/disjunctive-2.html">disjunctive / 2</A>, <A HREF="../../lib/lists/collection_to_list-2.html">lists : collection_to_list / 2</A>, <A HREF="../../lib/ic_edge_finder/disjunctive_bools-3.html">ic_edge_finder : disjunctive_bools / 3</A>, <A HREF="../../lib/edge_finder3/disjunctive_bools-3.html">edge_finder3 : disjunctive_bools / 3</A>, <A HREF="../../lib/edge_finder/disjunctive_bools-3.html">edge_finder : disjunctive_bools / 3</A>
</BODY></HTML>
